package fr.afpa.util;

import javax.tools.JavaCompiler;

/**
 * @author pev Cette classe contient des outil facilitant les tests
 * @version 0.1
 * @category Utils
 */
public class Utils {

	
	/**
	 * Cette methode permet de remplacer une valeur null par un new du type concerne <br\>
	 * <blockquote><pre>
	 * Ex :
	 * String s1;
	 * s1 = nullkiller("toto", String.class) 
	 * est equivalent to s1 = "toto"
	 * et 
	 * s1 = nullkiller(null, String.class); 
	 * est equivalent to s1 = new String();
	 * </pre></blockquote>
	 * @param obj l'objet dont on veut eviter la valeur null
	 * @param c la classe de l'objet en argument
	 * @return =  l' objet en argument si obj !=null et un new sur sa classe sinon.
	 * @throws InstantiationException, voir :  {@link java.lang.Class#newInstance() java.lang.Class.newInstance()}.
	 * @throws IllegalAccessException, voir : {@link java.lang.Class#newInstance() java.lang.Class.newInstance()}.
	 * @see java.lang.Class#newInstance() .
	 */
	static public <T> T nullSwap(T _obj, Class _classe) 
			throws InstantiationException, IllegalAccessException {

		if (_obj != null)
			return _obj;

		return (T) _classe.newInstance();
	}

	/**
	 * @param args
	 * Utils de nullkiller
	 */
	public static void main(String[] args) {
		// _CLEAN

		String s1 = "toto";
		String s2 = null;

		String res = "a";

		System.out.println("s1 = toto > " + s1);
		System.out.println("s2 = null > " + s2);
		System.out.println("res = a > " + res);

		try {
			res = nullSwap(s1,s1.getClass());
		} catch (Exception e) {
		
			e.printStackTrace();
		}

		System.out.println("res <- toto > " + res);

		try {
			res = nullSwap(s2, String.class);
		} catch (Exception e) {
		
			e.printStackTrace();
		}

		System.out.println("res <- null > " + res);

	}

}
